﻿using HtmlAgilityPack;
using Spider.Analyse;
using Spider.Entitys.天气预报各级实体对象;
using Spider.Rules;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spider.HTMLAnalyse.天气预报各级HTML解析
{
    public class 天气预报月份解析 : AnalyseBase, IAnalyse
    {
        public override List<T> GetListData<T>(HtmlDocument doc, IRule rule, object o = null)
        {
            List<T> listEntity = new List<T>();
            //更加xpath获取总的对象，如果不为空，就继续选择dl标签
            HtmlNode res = doc.DocumentNode.SelectSingleNode(rule.RuleXPathString());
            if (res != null)
            {
                var list = res.SelectNodes(@"div");//选择标签数组
                foreach (var item in list)
                {
                    var ullist = item.SelectNodes(@"ul");
                    if (ullist == null)
                    {
                        //最后一条数据有些问题   直接跳出去
                        continue;
                    }
                    foreach (var ul in ullist)
                    {
                        var lilist = ul.SelectNodes(@"li");
                        //季度
                        string tempJiDu = "";
                        foreach (var li in lilist)
                        {
                            ///判断是否是第一个
                            ///如果是第一个截取季度信息
                            ///如果不是第一个获取到URL，日期，年份
                            if (li.InnerHtml == li.InnerText)
                            {
                                tempJiDu = li.InnerText.Substring(0, li.InnerText.Length - 1);
                                continue;
                            }
                            //2011年6月北京天气
                            string tempText = li.InnerText;
                            天气预报月 entity = new 天气预报月()
                            {
                                季度 = tempJiDu,
                                年份 = tempText.AnalyseRegexResult("(.*)年"),
                                月份 = tempText.AnalyseRegexResult("年(.*)月"),
                                Url = li.InnerHtml.GetHref()
                            };
                            listEntity.Add((T)(object)entity);
                        }
                    }
                }
            }
            return listEntity;
        }
    }
}
